package com.kexio.user.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.kexio.auth.annotation.RequiresPermission;
import com.kexio.common.dto.Result;
import com.kexio.user.service.UserStatisticsService;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;

/**
 * 用户业务统计控制器
 * 
 * 🎯 职责：
 * - 提供用户、角色、权限、租户等业务指标统计
 * - 替代原本错误地放在缓存监控模块中的业务统计功能
 * 
 * ✅ 正确架构：业务统计放在业务模块中
 * ❌ 错误架构：业务统计放在基础设施模块中
 * 
 * @author Kexio Team
 * @since 2.2.0
 */
@RestController
@RequestMapping("/user")
@Tag(name = "用户业务统计", description = "用户、角色、权限、租户等业务指标统计接口")
public class UserStatisticsController {

    private static final Logger logger = LoggerFactory.getLogger(UserStatisticsController.class);

    @Autowired
    private UserStatisticsService userStatisticsService;

    /**
     * 获取业务统计数据
     * 
     * 📊 包含：用户统计、角色分布、权限使用、租户数据等
     */
    @GetMapping("/statistics")
    @RequiresPermission("user:statistics:query")
    @Operation(summary = "获取业务统计", description = "获取用户、角色、权限、租户等业务指标统计")
    public Result<UserStatisticsService.BusinessStatistics> getBusinessStatistics() {
        logger.debug("📊 获取用户业务统计数据");
        UserStatisticsService.BusinessStatistics stats = userStatisticsService.getBusinessStatistics();
        return Result.success(stats);
    }

    /**
     * 获取用户概览统计
     * 
     * 📊 包含：总用户数、活跃用户数、在线用户数
     */
    @GetMapping("/overview")
    @RequiresPermission("user:statistics:query")
    @Operation(summary = "获取用户概览统计", description = "获取用户相关的核心统计指标")
    public Result<UserStatisticsService.UserOverviewStatistics> getUserOverview() {
        logger.debug("📊 获取用户概览统计");
        UserStatisticsService.UserOverviewStatistics overview = userStatisticsService.getUserOverview();
        return Result.success(overview);
    }

    /**
     * 获取角色分布统计
     * 
     * 📊 包含：各角色的用户数量分布
     */
    @GetMapping("/role-distribution")
    @RequiresPermission("user:statistics:query")
    @Operation(summary = "获取角色分布统计", description = "获取各角色的用户数量分布统计")
    public Result<java.util.Map<String, Long>> getRoleDistribution() {
        logger.debug("📊 获取角色分布统计");
        java.util.Map<String, Long> distribution = userStatisticsService.getRoleDistribution();
        return Result.success(distribution);
    }

    /**
     * 获取租户统计数据
     * 
     * 📊 包含：总租户数、活跃租户数、租户用户分布
     */
    @GetMapping("/tenant-statistics")
    @RequiresPermission("user:statistics:query")
    @Operation(summary = "获取租户统计", description = "获取租户相关的统计数据")
    public Result<UserStatisticsService.TenantStatistics> getTenantStatistics() {
        logger.debug("📊 获取租户统计数据");
        UserStatisticsService.TenantStatistics tenantStats = userStatisticsService.getTenantStatistics();
        return Result.success(tenantStats);
    }
}
